package com.smart.community.user.service;

import com.smart.community.user.dto.LoginDTO;
import com.smart.community.user.dto.AppLoginDTO;
import com.smart.community.user.dto.RegisterDTO;
import com.smart.community.user.vo.LoginVO;
import com.smart.community.user.vo.AppLoginVO;
import com.smart.community.user.vo.UserVO;

/**
 * 认证服务接口
 * 
 * @author Wu.Liang
 */
public interface AuthService {

    /**
     * 用户登录
     * 
     * @param loginDTO 登录参数
     * @return 登录结果
     * @throws Exception 统一异常
     */
    LoginVO login(LoginDTO loginDTO) throws Exception;

    /**
     * App端用户登录（带身份验证）
     * 
     * @param appLoginDTO App登录参数
     * @return App登录结果
     * @throws Exception 统一异常
     */
    AppLoginVO appLogin(AppLoginDTO appLoginDTO) throws Exception;

    /**
     * 用户注册
     * 
     * @param registerDTO 注册参数
     * @throws Exception 统一异常
     */
    void register(RegisterDTO registerDTO) throws Exception;

    /**
     * 用户登出
     * @throws Exception 统一异常
     */
    void logout() throws Exception;

    /**
     * 刷新Token
     * 
     * @return 新的Token
     * @throws Exception 统一异常
     */
    String refreshToken() throws Exception;

    /**
     * 获取当前用户信息
     * 
     * @return 用户信息
     * @throws Exception 统一异常
     */
    UserVO getCurrentUser() throws Exception;

    /**
     * 重置密码
     * 
     * @param userId 用户ID
     * @param newPassword 新密码
     * @throws Exception 统一异常
     */
    void resetPassword(Long userId, String newPassword) throws Exception;

    /**
     * 发送重置密码邮件
     * 
     * @param email 邮箱
     * @throws Exception 统一异常
     */
    void sendResetPasswordEmail(String email) throws Exception;

    /**
     * 验证重置密码Token
     * 
     * @param token 重置Token
     * @return 是否有效
     * @throws Exception 统一异常
     */
    boolean validateResetToken(String token) throws Exception;

    /**
     * 记录登录日志
     * 
     * @param userId 用户ID
     * @param ip IP地址
     * @param userAgent 用户代理
     * @param success 是否成功
     * @param message 消息
     * @throws Exception 统一异常
     */
    void recordLoginLog(Long userId, String ip, String userAgent, boolean success, String message) throws Exception;

    /**
     * 修改密码
     * 
     * @param userId 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @throws Exception 统一异常
     */
    void changePassword(Long userId, String oldPassword, String newPassword) throws Exception;

    /**
     * 检查用户是否已登录
     * 
     * @return 是否已登录
     * @throws Exception 统一异常
     */
    boolean isLoggedIn() throws Exception;

    /**
     * 获取当前用户ID
     * 
     * @return 用户ID
     * @throws Exception 统一异常
     */
    Long getCurrentUserId() throws Exception;
} 